export class FunctionStore {
    private _functionMap: Map<string, Function> = new Map<string, Function>();

    /**
     * 添加一个函数
     * @param name - 函数的名称
     * @param func - 要添加的函数
     */
    public add(name: string, func: Function): void {
        this._functionMap.set(name, func);
    }

    /**
     * 调用已注册的函数
     * 如果没有找到对应的函数，它会在控制台中输出错误信息，并返回 null
     * @param name - 要调用的函数的名称
     * @param context - 调用函数的上下文
     * @param args - 调用函数时传递的参数
     * @return 调用函数后的返回值
     */
    public call(name: string, context: any, ...args: any[]): any {
        const func = this._functionMap.get(name);
        if (!func) {
            console.error(`Function ${name} not found`);
            return null;
        }
        return func.call(context, ...args);
    }

    public get(name: string): Function | null {
        if (this._functionMap.has(name)) {
            return this._functionMap.get(name)!;
        }
        return null;
    }

    public remove(name: string): void {
        this._functionMap.delete(name);
    }

    public clear(): void {
        this._functionMap.clear();
    }

   
}

export function getCommand() {
    let self: any = globalThis;
    if (!self.command) {
        self.command = new FunctionStore();
        console.log('instance', self.command);
    }
    return self.command;
}

export const command = getCommand() as FunctionStore;
